package com.tjetc;

public class _19DynamicBindingMechanism {
    public static void main(String[] args) {
        /*
            1. 当调⽤对象⽅法的时候，该⽅法会和该对象的内存地址/运⾏类型绑定。
            2. 当调⽤对象属性时，没有动态绑定机制，哪⾥声明，哪⾥使⽤。
         */
        A a = new B();
        // 第一个结果
//        System.out.println(a.sum());  // 40
//        System.out.println(a.sum1()); // 30

        // 注释掉子类的sum和sum1方法
        // 第二个结果
        System.out.println(a.sum());  // 30
        System.out.println(a.sum1()); // 20
    }
}

class A {
    public int i = 10;

    public int sum() {
        return getI() + 10;
    }

    public int sum1() {
        return i + 10;
    }

    public int getI() {
        return i;
    }
}

class B extends A {
    public int i = 20;

//    public int sum() {
//        return i + 20;
//    }
    @Override
    public int getI() {
        return i;
    }

//    public int sum1() {
//        return i + 10;
//    }
}